package com.example.cruds.service;

import cn.hutool.core.util.RandomUtil;
import com.example.cruds.common.Result;
import com.example.cruds.entity.PageBean;
import com.example.cruds.entity.User;
import com.example.cruds.exception.ServiceException;
import com.example.cruds.mapper.UserMapper;
import com.example.cruds.qingconfig.TokenUtils;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public void save(User user) {
        userMapper.insert(user);
    }

    public void gai(User user) {
        userMapper.gaibian(user);
    }

    public void delete(int id) {
        userMapper.shan(id);
    }

    public void deletePingliang(List<Integer> ids) {
        userMapper.shanPingliang(ids);
    }

    public User selectAll(Integer id) {
        return userMapper.chaZhao(id);
    }


    public List<User> selectAlls() {
        return userMapper.chaZhaos();
    }
    // 分页

    public PageBean page(Integer page, Integer pageSize, String name, String username, String phone) {
        PageHelper.startPage(page,pageSize);
        // 执行查询
        List<User> userList = userMapper.list(name, username, phone);
        //将这个插件中自带的Page类型强转为List类型
        Page<User> p = (Page<User>)userList;
        // 封装PageBean对象
        PageBean pageBean = new PageBean(p.getTotal(),p.getResult());
        return pageBean;
    }

// 登录,验证用户账号是否合法
    public User login(User user) {
             // 根据用户名查询数据库的用户信息
        User dbUser = userMapper.selectByUsername(user.getUsername());

        if(dbUser == null){
            // 抛出一个自定义的异常。需要新创建一个exception包
           throw new ServiceException("用户名或者密码错误");
        }
//        if(user.getPassword() !=dbUser.getPassword()) 正常是这样写，但是有风险，可以改成下面的这种方式 art+enter就能自动改  {
        if(!user.getPassword().equals(dbUser.getPassword())){
            throw new ServiceException("用户名或者密码错误");
        }
// 生成token
        String token= TokenUtils.createToken(dbUser.getId().toString(),dbUser.getPassword());
        dbUser.setToken(token);
        return dbUser;
    }

    // 注册
    public User register(User user) {
        // 根据用户名查询数据库的用户信息
        User dbUser = userMapper.selectByUsername(user.getUsername());
        if(dbUser != null){
            // 抛出一个自定义的异常。需要新创建一个exception包
            throw new ServiceException("用户名已经存在");
        }
        user.setName("honey"+ RandomUtil.randomNumbers(4));  //可以选择给用户一个默认的名称
        userMapper.insert(user);
        return user;
    }

// 第二种登录，黑马的方式
    public User logins(User user) {
        return userMapper.logins(user);
    }
}


















